%%html
<style>
table {margin-left: 0 !important;}
</style>
(até 4 integrantes)
| Github | Nome | Matricula | |
|---|---|---|---|
| Daniel Campos | A57635769 | daniel.ferraz.campos@gmail.com | |
| Leandro Daniel | A57622988 | contato@leandrodaniel.com | |
| Rodrigo Goncalves | A57566093 | rodrigo.goncalves@me.com | |
| Ygor Lima | A57549661 | ygor_redesocial@hotmail.com |
Escolha um dentre os seguintes datasets:
Para o dataset escolhido, deve-se:
a. Gerar plots que permitam tirar conclusões claras dos dados (a questão deve ser suficientemente complexa para que exija minimamente dois gráficos distintos complementares).
b. Os gráficos devem ser interpretados e discutidos, e as conclusões acerca dos mesmos e das questões de negócio devem ser apresentadas
O trabalho deverá ser desenvolvido em Jupyter notebook e deverá ser entregue na data combinada com o professor em formato .ipynb já rodado e com outputs salvos no arquivo entregue. Organize o documento de modo que ele esteja dividido nas 6 seções propostas acima.
Escolhemos trabalhar com o dataset fornecido referente ao histórico de preços de combustíveis de 2004 a 2019.
A ANP (Agencia Nacional de Petróleo) publica semanalmente relatórios de Gás, Diesel e outros combustíveis usados no país.
Esta publicação traz o valor médio, mínimo e máximo, de revenda e distribuição, por unidade de medida padrão de cada combustível, agrupados por região e unidade da federação.
O conjunto de dados apresenta os preços de revenda e distribuiçao, (médio, mínimo e máximo), em periodicidade semanal para os seguintes produtos:
Além dos preços de revenda e distribuiçao, (médio, mínimo e máximo), o conjunto de dados apresneta algumas informações adicionais:
Avaliar o comportamentos dos preços de combustíveis correlacionando com informacões adicionais como cotação internacional do barril de petroleo, flutuações da taxa câmbio, alterações da política de preços praticados pela Petrobras.
Vamos iniciar pela importação dos dados em um pandas dataframe.
Neste passo nos preocupamos de definir os nomes das variáveis bem como o correto data type de cada coluna.
import pandas as pd
import numpy as np
pd.set_option('display.max_rows', 30)
pd.set_option('display.max_columns', 30)
pd.set_option("display.precision", 3)
pd.set_option('display.expand_frame_repr', False)
dtype = {'INDEX': np.int32,
'DATA INICIAL': np.object,
'DATA FINAL': np.object,
'REGIÃO': 'category',
'ESTADO': 'category',
'PRODUTO': 'category',
'NÚMERO DE POSTSOS PESQUISADOS': np.int32,
'UINDADE DE MEDIDA': 'category',
'PREÇO MÉDIO REVENDA': np.float64,
'DESVIO PADRÃO REVENDA': np.float64,
'PRECO MÍNIMO REVENDA': np.float64,
'PRECO MÁXIMO REVENDA': np.float64,
'MARGEM MÉDIA REVENDA': np.float64,
'COEF DE VARIAÇÃO REVENDA': np.float64,
'PREÇO MÉDIO DISTRIBUIÇÃO': np.float64,
'DESVIO PADRÃO DISTRIBUIÇÃO': np.float64,
'PREÇO MÍNIMO DISTRIBUIÇÃO': np.float64,
'PREÇO MÁXIMO DISTRIBUIÇÃO': np.float64,
'COEF DE VARIAÇÃO DISTRIBUIÇÃO': np.float64}
df_prices = pd.read_csv('https://raw.githubusercontent.com/ldaniel/Advanced-Statistical-Modelling/master/data/raw/data_gasPricesBR_2004-2019.tsv',
sep = '\t',
dtype = dtype,
names = list(dtype),
skiprows = 1,
usecols = list(dtype),
index_col = 'INDEX',
na_values = ['-'],
parse_dates = ['DATA INICIAL', 'DATA FINAL'])
df_prices.head()
Vamos avaliar algumas características dos dados importados, como data types de cada variável, missing values,
df_prices.info()
Como podemos perceber temos alguns valores faltantes para algumas variáveis
df_prices.isnull().sum(axis = 0)
#!conda install -c conda-forge pandas-profiling=2.3.0
import pandas_profiling as pp
%%time
profile = df_prices.profile_report(style = {'full_width':True}, title = 'Brasil Histórico de Preços de Combustíveis',
check_recoded = False,
check_correlation_pearson = False,
check_correlation_cramers = False,
missing_diagrams = {
'bar': False,
'matrix': False,
'heatmap': False,
'dendrogram': False})
profile
Agora podemos enriquecer os dados extraindo da DATA INICIAL informações como ano, mês e semana.
df_prices['ANO'] = pd.DatetimeIndex(df_prices['DATA_INICIAL']).year
df_prices['MES'] = pd.DatetimeIndex(df_prices['DATA_INICIAL']).month
df_prices['SEMANA'] = pd.DatetimeIndex(df_prices['DATA_INICIAL']).week
df_prices[['DATA_INICIAL', 'DATA_FINAL', 'ANO', 'MES', 'SEMANA']]
Como exemplo podemos avaliar a evolução da média semanal anual dos preços de REVENDA e DISTRIBUIÇÃO da GASOLINA COMUM no estado de SAO PAULO
df_gas_sp = df_prices[(df_prices['PRODUTO'] == 'GASOLINA COMUM') &
(df_prices['ESTADO'] == 'SAO PAULO')].groupby(['PRODUTO', 'ESTADO', 'ANO'])
df_gas_sp[['ANO','PREÇO_MÉDIO_REVENDA', 'PREÇO_MÉDIO_DISTRIBUIÇÃO']].describe(include = [np.float64])
Podemos visualizar os dados utilizando um gráfico de linha para um determinado ESTADO e PRODUTO.
%matplotlib inline
import matplotlib.pyplot as plt
from pandas.plotting import register_matplotlib_converters
register_matplotlib_converters()
plt.style.use('default')
plt.rcParams["figure.figsize"] = (10, 5)
plt.rcParams.update({'font.size': 10})
df_plot = df_prices[(df_prices['PRODUTO'] == 'GASOLINA COMUM') &
(df_prices['ESTADO'] == 'SAO PAULO')]
x = df_plot['DATA_INICIAL']
y = df_plot['PREÇO_MÉDIO_REVENDA']
fig, ax = plt.subplots()
ax.plot(x, y, label = df_plot['PRODUTO'].iloc[0])
plt.title('Histórico de Preço - ' + df_plot['ESTADO'].iloc[0])
plt.legend()
plt.show()
Podemos fazer um loop por região e estado e verificar a evoluçao dos preços da GASOLINA COMUM por REGIÃO e ESTADO.
regions = df_prices['REGIÃO'].unique()
for region in regions:
fig, ax = plt.subplots()
df_plot = df_prices[(df_prices['REGIÃO'] == region) & (df_prices['PRODUTO'] == 'GASOLINA COMUM')]
estados = df_plot['ESTADO'].unique()
for estado in estados:
df_plot_est = df_plot[(df_plot['ESTADO'] == estado)]
x = df_plot_est['DATA_INICIAL']
y = df_plot_est['PREÇO_MÉDIO_REVENDA']
ax.plot(x, y,
label = df_plot_est['ESTADO'].iloc[0],
alpha = 0.5)
plt.legend()
plt.title('PREÇO_MÉDIO_REVENDA - ' + df_plot['REGIÃO'].iloc[0] + ' - ' + df_plot['PRODUTO'].iloc[0])
plt.show()